/**************************************************************************************
 *
 * @(#) Content.java
 * @Package com.jgdt.jgdtkasannong_university_gene_backend.controller
 **************************************************************************************/
package com.jgdt.jgdtkasannong_university_gene_backend.controller.content;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jgdt.jgdtkasannong_university_gene_backend.aspect.idempotent.ApiIdempotent;
import com.jgdt.jgdtkasannong_university_gene_backend.biz.content.MenuContentBiz;
import com.jgdt.jgdtkasannong_university_gene_backend.biz.content.TemplatetBiz;
import com.jgdt.jgdtkasannong_university_gene_backend.common.Sysconstant;
import com.jgdt.jgdtkasannong_university_gene_backend.common.response.PageRequest;
import com.jgdt.jgdtkasannong_university_gene_backend.common.response.ResultVo;
import com.jgdt.jgdtkasannong_university_gene_backend.vo.base.CheckimportVo;
import com.jgdt.jgdtkasannong_university_gene_backend.vo.content.menu_content.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;

/**
 * @description: 菜单内容-控制层
 * @author: huangAn
 * @createDate: 2025/04/24
 */
@Slf4j
@Tag(name = "菜单内容模块",description = "菜单内容模块")
@RestController
@RequestMapping("/api/menu/content")
public class MenuContentController {

    @Autowired
    private MenuContentBiz menuContentBiz;
    @Autowired
    private TemplatetBiz templatetBiz;

    /**
     * 系统log 系统名称 相关配置显示
     * @return
     */
    @Operation(summary = "系统log 系统名称 相关配置显示", description = "系统log 系统名称 相关配置显示")
    @GetMapping("/querySysLogName")
    public ResultVo<QuerySysLogNameVo> querySysLogName(){
        return ResultVo.success(menuContentBiz.querySysLogName());
    }

    /**
     * 大厅-table页面显示
     * @return
     */
    @Operation(summary = "大厅-table页面显示", description = "大厅-table页面显示")
    @GetMapping("/hallTableShow")
    public ResultVo<HallTableShowVo> hallTableShow(){
           return ResultVo.success(menuContentBiz.hallTableShow());
    }


    /**
     * 根据菜单id查询全部字节点及内容
     * @param parentId
     * @return
     */
    @Operation(summary = "根据菜单id查询全部字节点及内容", description = "根据菜单id查询全部字节点及内容")
    @GetMapping("/childrenShow")
    public ResultVo<List<ChildrenShowVo>> childrenShow(@RequestParam Integer parentId){
        return ResultVo.success(menuContentBiz.childrenShow(parentId));
    }

    /**
     * 根据菜单id分页查询当前节点分页内容
     * @param request
     * @return
     */
    @Operation(summary = "根据菜单id分页查询当前节点分页内容", description = "根据菜单id分页查询当前节点分页内容")
    @PostMapping("/contentPageByMenu")
    public ResultVo<IPage<ContentGeneralVo>> contentPageByMenu(@RequestBody @Validated PageRequest<ContentPageByMenuParameter> request){
        return ResultVo.success(menuContentBiz.contentPageByMenu(request));
    }


    /**
     * 根据菜单id下载模板
     *
     * @param menuId
     * @return
     */
    @Operation(summary = "根据菜单id下载模板", description = "根据菜单id下载模板")
    @GetMapping("/downloadByMenu")
    @ApiIdempotent(value = "根据菜单id下载模板-幂等处理"
            ,apiNameCode = Sysconstant.IDEMPOTENT_APINAMECODE_CONTENT_DOWNLOAD_BY_MENU
            ,idempotentTime = 10,apiErrMsg = "请勿频繁操作!请在10秒后重试！")
    public void downloadByMenu(HttpServletResponse response, @RequestParam Integer menuId) {
        templatetBiz.downloadByMenu(response, menuId);
    }

    /**
     * 根据菜单id文件上传-同步
     *
     * @param file
     * @param menuId
     * @return
     */
    @Operation(summary = "根据菜单id文件上传-同步", description = "根据菜单id文件上传-同步")
    @PostMapping("/importByMenu")
    @ApiIdempotent(value = "根据菜单id文件上传-同步-幂等处理"
            ,apiNameCode = Sysconstant.IDEMPOTENT_APINAMECODE_CONTENT_IMPORT_BY_MENU
            ,idempotentTime = 10,apiErrMsg = "请勿频繁操作!请在10秒后重试！")
    public ResultVo<CheckimportVo> importByMenu(@RequestParam("file") MultipartFile file, @RequestParam Integer menuId) {
        //校验文件格式
        CheckimportVo checkimportVo=templatetBiz.checkImportData(file, menuId);
        if(!checkimportVo.isSuccessBool()){
            return ResultVo.success(checkimportVo);
        }
        //导入文件
        templatetBiz.importData(file, menuId);
        return ResultVo.success(checkimportVo);
    }

//    /**
//     * 根据菜单id文件上传-异步检测数据是否正常
//     *
//     * @param file
//     * @param menuId
//     * @return
//     */
//    @Operation(summary = "根据菜单id文件上传-异步检测", description = "根据菜单id文件上传-异步检测")
//    @PostMapping("/importByMenuCheck")
//    public ResultVo<CheckimportVo> importByMenuCheck(@RequestParam("file") MultipartFile file, @RequestParam Integer menuId) {
//        //校验文件格式
//        CheckimportVo checkimportVo=templatetBiz.checkImportData(file, menuId);
//        return ResultVo.success(checkimportVo);
//    }

//    /**
//     * 根据菜单id文件上传-异步导入
//     *
//     * @param file
//     * @param menuId
//     * @return
//     */
//    @Operation(summary = "根据菜单id文件上传-异步导入", description = "根据菜单id文件上传-异步导入")
//    @PostMapping("/importByMenuAsync")
//    public ResultVo<String> importByMenuAsync(@RequestParam("file") MultipartFile file, @RequestParam Integer menuId) {
//        //校验文件格式
//        CheckimportVo checkimportVo=templatetBiz.checkImportData(file, menuId);
//        if(!checkimportVo.isSuccessBool()){
//            log.warn("importByMenuAsync warn:此文件检测未通过！");
//            return ResultVo.success("此文件检测未通过！") ;
//        }
//        //导入文件
//        templatetBiz.importDataAsync(file, menuId);
//        return ResultVo.success("稍后可查看导入最新数据,后台正在导入处理中...");
//    }

}




